import { parseDate } from '@/utils'
/**
 * 渲染金额
 * @param {*} value 额度
 * @returns
 */
export const renderAmount = (
	value,
	{
		forceSign = false, // 是否强制显示+/-号
		hideColor = false, // 是否去掉涨跌颜色
		showUnit = false, // 是否展示单位(万/万元)
		zeroNull = false, // 0是否当作空处理
		wanStart = 1000000, // 切换小数单位，默认一百万切换
		fixedNum = 2, // 显示小数位数；默认2展示两个小数点；-1自适应有小数就展示小数点，没有小数就不展示小数点
		unit = '元', // 单位名称
		placeholder = '-', // 为空时的占位符
	} = {}
) => {
	// 数值为空，展示'-'
	if (!value && (value !== 0 || zeroNull)) {
		return hideColor
			? placeholder
			: `<span style="color: #333">${placeholder}</span>`
	}
	value = Number(value) || 0
	const colorVars = {
		zero: '#333',
		profit: '#ed3636',
		deficit: '#2ab855',
	}
	let style = ''
	if (!hideColor) {
		if (value === 0) {
			style = `color: ${colorVars.zero}`
		} else if (value > 0) {
			style = `color: ${colorVars.profit}`
		} else {
			style = `color: ${colorVars.deficit}`
		}
	}
	if (Math.abs(value) >= wanStart) {
		return `<span style="${style}">${value > 0 && forceSign ? '+' : ''}${
			fixedNum >= 0 ? (value / 10000).toFixed(fixedNum) : value / 10000
		}${showUnit ? `<span class="unit">万${unit}</span>` : ''}</span>`
	}
	return `<span style="${style}">${value > 0 && forceSign ? '+' : ''}${
		fixedNum >= 0 ? value.toFixed(fixedNum) : value
	}${showUnit ? `<span class="unit">${unit}</span>` : ''}</span>`
}

/**
 * 渲染金额单位
 * @param {*} value
 * @param {*} wanStart // 切换小数单位，默认一百万切换
 * @returns
 */
export const renderAmountUnit = (
	value,
	{
		wanStart = 1000000, // 切换小数单位，默认一百万切换
		unit = '元', // 单位名称
	} = {}
) => {
	if (!value && value !== 0) {
		return unit
	}
	value = Number(value) || 0
	return `${Math.abs(value) >= wanStart ? '万' : ''}${unit}`
}

/**
 * 渲染百分比值
 * @param {*} value
 * @returns
 */
export const renderRate = (
	value,
	{
		forceSign = false, // 是否强制显示+/-号
		hideColor = false, // 是否去掉涨跌颜色
		showUnit = false, // 是否展示%
		zeroNull = false, // 0是否当作空处理
		fixedNum = 2, // 显示小数位数；默认2展示两个小数点；-1自适应有小数就展示小数点，没有小数就不展示小数点
		placeholder = '-', // 为空时的占位符
	} = {}
) => {
	// 数值为空，展示'-'
	if (!value && (value !== 0 || zeroNull)) {
		return hideColor
			? placeholder
			: `<span style="color: #333">${placeholder}</span>`
	}
	value = Number(value) || 0
	const colorVars = {
		zero: '#333',
		profit: '#ed3636',
		deficit: '#2ab855',
	}
	let style = ''
	if (!hideColor) {
		if (value === 0) {
			style = `color: ${colorVars.zero}`
		} else if (value > 0) {
			style = `color: ${colorVars.profit}`
		} else {
			style = `color: ${colorVars.deficit}`
		}
	}
	return `<span style="${style}">${value > 0 && forceSign ? '+' : ''}${
		fixedNum >= 0 ? (value * 100).toFixed(fixedNum) : value * 100
	}${showUnit ? '<span class="unit">%</span>' : ''}</span>`
}

/**
 * 渲染脱敏用户名
 * @param {*} name
 * @param {*} isShowName 是否展示未脱敏名字
 * @returns
 */
export const renderUsername = (name = '', isShowName = false) => {
	if (!name) {
		return '-'
	}
	if (isShowName) {
		return name
	}
	if (name.length <= 3) {
		return name.replace(/^./, '*')
	}
	if (name.length <= 6) {
		return name.replace(/^.{2}/, '**')
	}
	return name.replace(/(^.{2}).{4}/, '$1****')
}

/**
 * 渲染时间
 * @param {*} dateStr
 * @param {*} fmt 'yyyy-MM-dd hh:mm:ss'
 * @returns
 */
export const renderDate = function (
	dateStr,
	fmt = 'yyyy-MM-dd hh:mm:ss',
	placeholder = ''
) {
	const date = parseDate(dateStr)
	if (!date) {
		return placeholder
	}
	const o = {
		'M+': date.getMonth() + 1,
		'd+': date.getDate(),
		'h+': date.getHours(),
		'm+': date.getMinutes(),
		's+': date.getSeconds(),
		'q+': Math.floor((date.getMonth() + 3) / 3),
		S: date.getMilliseconds(),
	}
	if (/(y+)/.test(fmt)) {
		fmt = fmt.replace(
			RegExp.$1,
			(date.getFullYear() + '').substr(4 - RegExp.$1.length)
		)
	}
	for (const k in o) {
		if (new RegExp('(' + k + ')').test(fmt)) {
			fmt = fmt.replace(
				RegExp.$1,
				RegExp.$1.length === 1
					? o[k]
					: ('00' + o[k]).substr(('' + o[k]).length)
			)
		}
	}
	return fmt
}

/**
 * 渲染时效类时间
 * @param {*} dateStr
 * @returns
 */
export const renderNewsDate = (dateStr) => {
	const date = parseDate(dateStr)
	if (!date) {
		return ''
	}
	const now = new Date() // 获取当前时间的 Date 对象
	const year = now.getFullYear() // 获取当前年份
	const targetYear = date.getFullYear() // 获取目标日期的年份
	const diff = now - date
	// 1分钟内
	if (diff <= 60 * 1000) {
		return '刚刚'
	}
	// 1小时内
	if (diff <= 60 * 60 * 1000) {
		return `${Math.floor(diff / (60 * 1000))}分钟前`
	}
	// 24小时内
	if (diff <= 24 * 60 * 60 * 1000) {
		return `${Math.floor(diff / (60 * 60 * 1000))}小时前`
	}
	// 1周内
	if (diff <= 7 * 24 * 60 * 60 * 1000) {
		return `${Math.floor(diff / (24 * 60 * 60 * 1000))}天前`
	}
	// 本年度
	if (year === targetYear) {
		return renderDate(dateStr, 'MM-dd')
	}
	// 非本年度
	return renderDate(dateStr, 'yyyy-MM-dd')
}

/**
 * 渲染阅读数
 * @param {*} count
 * @returns
 */
export const renderReadCount = (count) => {
	count = Number(count)
	if (!count) {
		return `0阅读`
	}
	// 0-9999人，展示全部数字
	if (count <= 9999) {
		return `${count}阅读`
	}
	// 10000-99999人，展示几.几w
	if (count <= 100000) {
		count = count / 10000
		return `${Number.isInteger(count) ? count : count.toFixed(1)}w阅读`
	}
	// 超过100000人，展示10w+
	return `10w+阅读`
}

/**
 * 渲染搜索结果高亮
 * @param {*} title
 * @param {*} kWord
 * @returns
 */
export const renderHighlight = (title, kWord = '') => {
	let words = [] // 关键字列表
	let txt = title // 返回内容
	if (!kWord.trim()) {
		return txt
	}
	if (kWord.indexOf(',') > -1) {
		words = kWord.split(',')
	} else {
		words = [kWord]
	}
	// 循环关键字列表替换内容
	words.forEach((name) => {
		const reg = new RegExp(`(${name})`, 'ig')
		const keyVal = reg.test(title) ? RegExp.$1 : ''
		txt = txt.replace(reg, `<span style="color: #ed3636">${keyVal}</span>`)
	})
	return txt
}

/**
 * 渲染国际化数值 1,000,000
 * @param {*} num
 * @returns
 */
export const renderIntlNum = (num = 0) => {
	if (num === 0) {
		return 0
	}
	if (!num) {
		return '-'
	}
	return Number(num)
		.toFixed(2)
		.replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
}

/**
 * 拼接cdn地址
 * @param {*} path cdn相对路径
 * @returns
 */
export const renderCDN = (path) => {
	return bjsdk.url(`{cdn}${path}`)
}
